Skip to main content

디자인 패턴개요

디자인 패턴이란?

디자인 패턴의 탄생배경 Story

  • 소프트웨어 설계 방법론과 지침을 통한 공유
    • 접근의 한계가 있으며, 방법론이나 지침은 일반화된 것이어서 구체적인 문제에 적용하기 위해서는 또다른 지식이 필요
  • 사례를 통한 공유
    • 사례는 너무 구체적이고 특정 문제의 가정에 의존

-> 위의 두자지 모두 한계점이 있으며, 일반적이지도 구체적이지도 않은 형태의 소프트웨어 설계를 위한 지침을 고민하면서 생긴것이 디자인 패턴이다.

디자인 패턴이란

  • 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 수 있는 훌륭한 해결책이다.

  • 패턴이란

    • 각기 다른 소프트웨어 모듈이나 기능을 가진 다양한 응용 소프트웨어 시스템들을 개발할 때도 서로 간에 공통되는 설계문제가 존재하며 이를 처리하는 해결책 사이에도 공통점이 있다. 이러한 유사점을 패턴이라 한다.
    • 패턴은 공통의 언어를 만들어주며 팀원 사이의 의사 소통을 원활하게 해주는 아주 중요한 역할을 한다.
  • GoF(Gang of Fout) 디자인 패턴

    • 에리히 감마, 리차드헤름, 랄프 존슨, 존 블리시디스
    • 소프트웨어 개발 영역에서 디자인패턴을 구체화하고 체계화한 사람들
    • 23가지의 디자인 패턴을 정리하고 각각의 디자인 패턴을 생성, 구조, 행위 3가지로 분류했다.
  • GoF 디자인 패턴의 분류

    • 생성(Creational)패턴구조(Structural)패턴행위(Behavioral)패턴
      - 추상 팩토리(Abstract Factory)
      - 빌더(Builder)
      - 팩토리 메서드(Factory Methods)
      - 프로토타입(Prototype)
      - 싱글턴(Singleton)
      - 어댑터(Adapter)
      - 브리지(Bridge)
      - 컴포지트(Composite)
      - 데코레이터(Decorator)
      - 퍼사드(Facade)
      - 플라이웨이트(Flyweight)
      - 프록시(Proxy)
      - 책임 연쇄(Chain of Responsibility)
      - 커맨드(Command)
      - 인터프리터(Interpreter)
      - 이터레이터(Iterator)
      - 미디에이터(Mediator)
      - 메멘토(Memento)
      - 옵서버(Observer)
      - 스테이트(State)
      - 스트래티지(Strategy)
      - 템플릿 메서드(Template Method)
      - 비지터(Visitor)
  • 생성패턴(Creational):

    • 객체 생성에 관련된 패턴
    • 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다.
  • 구조패턴(Structural):

    • 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴
    • 예를 들어 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어 새로운 기능을 제공하는 패턴이다.
  • 행위패턴(Behavioral):

    • 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴
    • 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하는지, 또 그렇게 하면서도 객체 사이의 결합도를 최소화 하는것에 중점을 둔다.

관련 면접 질문

  • 디자인 패턴을 사용하는 이유는 무엇인가요?

    -> 근본적인 이유는 문제 해결방법의 가장 좋은 방식을 사용하기 위함이고, 재사용성을 높이고 변경을 쉽게 하도록 하는 구조를 가짐으로써 커뮤니케이션을 할때에도 구체적인 설명 없이 구조화된 패턴에 대한 사전 지식으로 이해가 수월하다.

  • 객체지향과 절차지향에서 어느 쪽에 더 사용이 되는가요?

    -> 객체지향에서 더 사용이 됩니다. 디자인 패턴이 발달한 배경에는 객체지향 프로그래밍이 지향하는 방향과 좋은 프로그램은 무엇인지에 대한 고찰을 기반으로 만들어 진것입니다. 각 패턴 별로 용도를 확인해보면 객체지향에 초점이 맞춰져 있는것을 확인할 수 있습니다.

참고자료:

디자인패턴 종류

기여자


Youngwoo Kim

📦